package cn.org.timespace.easyframe.util;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public final class SMGPPropertie {
	private static final Log log =LogFactory.getLog(SMGPPropertie.class);
	private static Properties prop;

	private SMGPPropertie() {
	}

	static {
		reload();
	}

	/**
	 * 加载资源配置文件
	 * @return
	 */
	public static boolean reload() {
		boolean flag = false;
		prop = new Properties();
		try {
			prop.load(SMGPPropertie.class.getResourceAsStream("/smgp.properties"));
			flag = true;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return flag;
	}

	public static Properties getSysProperties() {
		return prop;
	}

	/**
	 * 获取指定的系统属性值
	 * 
	 * @param key
	 *            指定的属性名称
	 * @return 指定的系统属性值
	 */
	public static String getProperty(String key) {
		return prop.getProperty(key);
	}

	/**
	 * 获取指定的系统属性值
	 * 
	 * @param key
	 *            指定的属性名称
	 * @param defaultVal
	 *            默认值
	 * @return 指定的系统属性值
	 */
	public static String getProperty(String key, String defaultVal) {
		return prop.getProperty(key, defaultVal);
	}
	/**
	 * 区分电话号码数组 中 各个电话号码的网络类型
	 * @param String phone 手机号码字符串，多个用 “,”隔开
	 * @retrun Map<key,value> 
	 * key: Integer   0：电信    1：移动   2：联通
	 * value: String 手机号码，多个用 “,”隔开
	 * */
	public static Map<Integer,String> dividePhoneType(String phone){
		Map<Integer, String> map = new HashMap<Integer, String>();
		StringBuilder mobile = new StringBuilder();//移动
		StringBuilder unicom = new StringBuilder();//联通
		StringBuilder telecom = new StringBuilder();//电信
		String[] phones = phone.split(",");
		int phoneLen = phones.length;
		for(int i=0;i<phoneLen;i++){
			int type = checkPhoneType(phones[i]);
			if(type==0){//电信
				telecom.append(phones[i]).append(",");//荆州AP发送
			}else if(type==1){//移动
				mobile.append(phones[i]).append(",");
			}else if(type==2){//联通
				unicom.append(phones[i]).append(",");//荆州联通发送
			}else{//未知
				log.info("短信发送失败，不能确定手机号码:"+phone+"的网络类型!");
			}
		}
		if(telecom!=null&&telecom.length()>0)
			map.put(0, telecom.substring(0,telecom.length()-1));
		else
			map.put(0, "");
		
		if(mobile!=null&&mobile.length()>0)
			map.put(1, mobile.substring(0,mobile.length()-1));
		else
			map.put(1, "");
		
		if(unicom!=null&&unicom.length()>0)
			map.put(2, unicom.substring(0,unicom.length()-1));
		else
			map.put(2, "");
		
		return map;
	}
	
	/**
	 * 判断短话号码的网络类型
	 * @param phone 手机号码
	 * @retrun 网络类型  0：电信    1：移动   2：联通
	 * */
	public static int checkPhoneType(String phone){
		//移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
		//联通：130、131、132、152、155、156、185、186
		//电信：133、153、180、189、（1349卫通）
		int type = 100;
		String[] moblie = {"134","135","136","137","138","139","150","151","152","157","158","159","187","188"};//移动
		String[] unicom = {"130","131","132","155","156","185","186"};//联通
		String[] telecom = {"133","153","180","189"};//电信
		String top = phone.substring(0,3);
		
		for(int m=0;m<telecom.length;m++)
		{
			if(telecom[m].equals(top)){
				type = 0;
				break;
			}
		}
		if(type==100){//不属于电信类型
			for(int j=0;j<unicom.length;j++)
			{
				if(unicom[j].equals(top)){
					type = 2;
					break;
				}
			}
			if(type==100){//不属于联通类型
				for(int i=0;i<moblie.length;i++)
				{
					if(moblie[i].equals(top)){
						type = 1;
						break;
					}
				}
				return type;
			}else{
				return type;
			}
		}else{
			return type;
		}
	}
	
}
